package com.Set;

import java.util.*;

/**
 * 1.观察TreeSet对于有值特性的数据如何排序
 * 2.学会对自定义类型对象进行制定规则排序
 */

public class treeSetDemo {
    public static void main(String[] args) {
        //使用多态和泛型创建TreeSet对象

        //1.Integer类型
        Set<Integer> tree=new TreeSet<>();// 特点：不重复，无索引、可排序
        tree.add(12);
        tree.add(4);
        tree.add(56);
        tree.add(23);
        System.out.println(tree);
        //[4, 12, 23, 56]默认升序


        //1.Double类型
        Set<Double> tree2=new TreeSet<>();// 特点：不重复，无索引、可排序
        tree2.add(12.0);
        tree2.add(4.0);
        tree2.add(56.0);
        tree2.add(23.0);
        System.out.println(tree2);
        //[4.0, 12.0, 23.0, 56.0]默认升序



        //1.String类型
        Set<String> tree3=new TreeSet<>();// 特点：不重复，无索引、可排序
        tree3.add("java");
        tree3.add("about");
        tree3.add("Java");
        tree3.add("About");
        tree3.add("黑马");
        tree3.add("23");
        System.out.println(tree3);
        //[23, About, Java, about, java, 黑马]
        //



        //自定义对象
        //对于自定义类型，TreeSet是不知道如何进行排序的，我们要自己制定排序规则

        //第一种：让类继承Comparator接口使用泛型，与本类对象进行比较
//        TreeSet<Student> treeSet=new TreeSet<>();
//        Student student1=new Student("lingyi",18,'男');
//        Student student2=new Student("lingyi",18,'男');
//        Student student3=new Student("ting",20,'女');
//        Collections.addAll(treeSet,student1,student2,student3);
//        System.out.println(treeSet);

        //第二种：使用TreeSet的比较器
        TreeSet<Student>treeSet=new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //按照年龄升序
                return  o1.getAge()-o2.getAge();
            }
        });
        Student student1=new Student("lingyi",18,'男');
        Student student2=new Student("lingyi",18,'男');
        Student student3=new Student("ting",20,'女');
        Collections.addAll(treeSet,student1,student2,student3);
        System.out.println(treeSet);

    }
}
